const http = require('http');
const fs = require('fs');
const path = require('path');

// 确定读取目标（同前序任务）
const targetFileName = process.argv[2] || __filename;
const targetPath = path.join(__dirname, targetFileName);

// 创建服务器
const server = http.createServer((req, res) => {
  if (req.url !== '/') {
    res.writeHead(404);
    res.end('仅支持访问根路径（localhost:8081）');
    return;
  }

  // 1. 创建文件读取流（Stream）：自动分批读取，无需手动管理Buffer
  const readStream = fs.createReadStream(targetPath, 'utf8');

  // 2. 处理流的事件
  // 流“错误”事件：文件不存在或读取失败
  readStream.on('error', (err) => {
    res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end(`错误：文件流读取失败\n原因：${err.message}`);
    console.error('流错误：', err.message);
  });

  // 流“打开”事件：文件成功打开（可选，仅用于日志）
  readStream.on('open', () => {
    console.log(`已打开文件：${targetPath}`);
  });

  // 3. 流“管道”到响应：直接将读取的数据流发送给客户端（自动处理“数据”和“结束”事件）
  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
  res.write(`文件内容如下（流读取模式）：\n\n`); // 先发送提示文本
  readStream.pipe(res); // 核心：流 → 响应，自动完成数据传输和结束
});

// 启动服务器
server.listen(8081, () => {
  console.log(`服务器已启动：http://localhost:8081`);
  console.log(`当前读取目标：${targetFileName || '默认读取自身（fileReader3.js）'}`);
});